package newsSystem.user;
import newsSystem.Order.OrderInfo;
import newsSystem.Order.OrderManager;
import newsSystem.dao.OrderInfoJDBC;
import newsSystem.layout.UserLayOutPage;


import javax.swing.*;
import javax.swing.border.LineBorder;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import static newsSystem.dao.OrderInfoJDBC.deleteOrderFromDatabase;

public class UserPageTwoJPane {
    private static JTable table1;//报刊信息面板
    static List<OrderInfo> orderList;

    // 添加一个方法用于清空表格内容
    public static void clearTable() {
        System.out.println("清空列表数据");
        orderList.clear();
    }
    // 删除成功后重新渲染数据到表格
//    private void refreshTable() {
//        // 清空表格数据
//        tableModel.setRowCount(0);
//
//        // 重新添加最新的订单数据到表格
//        for (OrderInfo order : orderList) {
//            Object[] rowData = {order.getOrderNo(), order.getNewsID(), order.getOrderAmount(), order.getOrderMonth(), order.getOrderPrice(), order.getOrderDate()};
//            tableModel.addRow(rowData);
//        }
//    }
    public static  JScrollPane createPage(String UserID){
        DefaultTableModel tableModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int column) {
                // 设置所有单元格不可编辑
                return false;
            }
        };
//        调用OrderJDBC方法
//        OrderInfoJDBC.orderJDBC();
        OrderInfoJDBC.getOrderInfoByUserID(UserID);
//        调用AdminManager的get来测试添加函数,获取管理员数据
        orderList=OrderManager.getOrderList();
        // 添加表头
        String[] columnNames = {"订单编号", "报刊名称","订阅份数", "订阅月数", "订阅金额", "订单日期"};

        tableModel.setColumnIdentifiers(columnNames);
        // 创建表格
//        table1.setModel(null);
        table1 = new JTable(tableModel);
//        table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置选择模式
        // 设置表头的字体大小
        JTableHeader header = table1.getTableHeader();
        Font headerFont = new Font("幼圆", Font.BOLD, 18); // 设置表头字体
        header.setFont(headerFont);
// 设置表格的字体
        Font tableFont = new Font("黑体", Font.PLAIN, 16); // 定义表格字体样式
        table1.setFont(tableFont);

// 设置表格的行高
        table1.setRowHeight(30); // 设置每行的高度为30像素
        // 将报刊列表数据添加到表格中
        for (OrderInfo order : orderList) {
            Object[] rowData = {order.getOrderNo(),order.getNewsID(),order.getOrderAmount(),order.getOrderMonth(),order.getOrderPrice(),order.getOrderDate()};
            tableModel.addRow(rowData);
        }

        // 添加鼠标点击事件监听器
        table1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // 获取被选中的行索引
                int rowIndex = table1.getSelectedRow();
                System.out.println("Selected Row Index: " + rowIndex);
                int orderno=0;
                if ( rowIndex != -1) { // 如果有行被选中
                    // 从原始数据列表中获取对应的 OrderInfo 对象
                    OrderInfo selectedOrder = orderList.get( rowIndex);
                    // 进行操作，比如输出订单编号
                    orderno=selectedOrder.getOrderNo();
                    System.out.println("选中的订单编号：" + selectedOrder.getOrderNo());
                }

                // 创建一个确认对话框
                int option = JOptionPane.showConfirmDialog(null, "是否退订当前订单?", "确认退订", JOptionPane.YES_NO_OPTION);

                // 处理用户的选择
                if (option == JOptionPane.YES_OPTION) {
                    // 用户选择了订阅
                    System.out.println("用户选择了退订");
                    deleteOrderFromDatabase( orderno);
                    System.out.println("退订成功");
                    UserPageTwoJPane.clearTable();
                    //       重新连接数据库
                    OrderInfoJDBC.getOrderInfoByUserID(UserID);
//        调用AdminManager的get来测试添加函数,获取管理员数据
                    orderList=OrderManager.getOrderList();
                    // 清空表格数据
                    tableModel.setRowCount(0);
                    // 重新添加最新的订单数据到表格
                    for (OrderInfo order : orderList) {
                        Object[] rowData = {order.getOrderNo(), order.getNewsID(), order.getOrderAmount(), order.getOrderMonth(), order.getOrderPrice(), order.getOrderDate()};
                        tableModel.addRow(rowData);
                    }
                    // 在这里添加订阅的逻辑
                } else if (option == JOptionPane.NO_OPTION) {
                    // 用户选择了取消订阅
                    System.out.println("用户选择了取消退订");
                    // 在这里添加取消订阅的逻辑
                } else {
                    // 用户关闭了对话框或者按下了"取消"按钮
                    System.out.println("用户关闭了对话框");
                }

            }
        });


        // 创建一个 JScrollPane 来容纳 JTable
        JScrollPane page2 = new JScrollPane(table1);
        // 设置 JScrollPane 的边框为黄色
        // 禁用布局管理器
//        page2.setBorder(new LineBorder(Color.YELLOW));
        page2.setBounds(0,0,900,400);
        return page2;
    }

    public static void main(String[] args) {

    }
}